package com.hgkj.common.core.domain;

import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.hgkj.common.core.constant.ParameterConstant;
import com.hgkj.common.core.utils.Convert;
import com.hgkj.common.core.utils.RequestUtils;

import java.util.List;

/**
 * 公共功能
 */
public class BaseController {

    /**
     * 快速成功
     *
     * @return Api Resp
     */
    protected ApiResult success() {
        return ApiResult.success();
    }

    /**
     * 快速成功
     *
     * @param data 查询结果
     * @return ApiResp
     */
    protected ApiResult success(Object data) {
        return ApiResult.success(data);
    }

    /**
     * 快速成功
     *
     * @param msg 成功消息
     * @return ApiResp
     */
    protected ApiResult success(String msg) {
        return ApiResult.success(msg);
    }

    /**
     * 快速成功
     *
     * @param msg  成功消息
     * @param data 查询结果
     * @return ApiResp
     */
    protected ApiResult success(String msg, Object data) {
        return ApiResult.success(msg, data);
    }

    /**
     * 快速失败
     * @return Api Resp
     */
    protected ApiResult error() {
        return ApiResult.error();
    }

    /**
     * 快速失败
     * @param msg 失败消息
     * @return Api Resp
     */
    protected ApiResult error(String msg) {
        return ApiResult.error(msg);
    }

    /**
     * 快速失败
     * @param data 失败结果
     * @return Api Resp
     */
    protected ApiResult error(Object data) {
        return ApiResult.error(data);
    }

    /**
     * 快速失败
     * @param msg 失败消息
     * @param data 失败结果
     * @return Api Resp
     */
    protected ApiResult error(String msg, Object data) {
        return ApiResult.error(msg, data);
    }

    /**
     * 获取结果
     *
     * @param rows 操作行数
     * @return Api Resp
     */
    protected ApiResult getResult(int rows) {
        return rows > 0 ? ApiResult.success() : ApiResult.error();
    }

    /**
     * 获取结果
     *
     * @param flag 操作结果
     * @return Api Resp
     */
    protected ApiResult getResult(boolean flag) {
        return flag ? ApiResult.success() : ApiResult.error();
    }

    /**
     * 开启分页
     */
    protected void startPage() {
        Integer pageNum = Convert.toInt(RequestUtils.getParameter(ParameterConstant.PAGE_NUM), 1);
        Integer pageSize = Convert.toInt(RequestUtils.getParameter(ParameterConstant.PAGE_SIZE), 10);
        PageHelper.startPage(pageNum, pageSize);
    }

    /**
     * 获取分页响应
     *
     * @param list SQL RESULT
     * @return API RESULT
     */
    protected ApiResult getTableData(List<?> list) {
        PageTable pageTable = buildPageTable(list);
        return ApiResult.success("分页查询成功～", pageTable);
    }

    /**
     * 获取分页结果
     *
     * @param list SQL RESULT
     * @return LIMIT RESULT
     */
    private PageTable buildPageTable(List<?> list) {
        PageTable pageTable = new PageTable();
        PageInfo<?> pageInfo = new PageInfo<>(list);
        pageTable.setPageNum(pageInfo.getPageNum());
        pageTable.setPageSize(pageInfo.getPageSize());
        pageTable.setTotal(pageInfo.getTotal());
        pageTable.setPages(pageInfo.getPages());
        pageTable.setRows(pageInfo.getList());
        return pageTable;
    }
}
